#!/bin/bash

# 设置错误时退出
set -e

# 保存当前目录
SCRIPT_DIR=$(pwd)

# 配置变量
PROJECT_ROOT_DIR="${SCRIPT_DIR}/.."
PROJECT_NAME="ruoyi-admin"
JAR_FILE="ruoyi-admin.jar"
REMOTE_HOST="root@117.72.199.127"
REMOTE_DIR="/home/root/appdata/app"

echo "========================================"
echo "开始部署流程"
echo "========================================"

# 执行Maven构建
echo "正在构建项目..."
#if mvn clean package -DskipTests -f "${PROJECT_ROOT_DIR}/pom.xml"; then
#    echo "项目构建成功！"
#else
#    echo "错误: 项目构建失败！"
#    exit 1
#fi

# 检查JAR文件是否存在
JAR_PATH="${PROJECT_ROOT_DIR}/${PROJECT_NAME}/target/${JAR_FILE}"
#if [ ! -f "${JAR_PATH}" ]; then
#    echo "错误: JAR文件不存在: ${JAR_PATH}"
#    exit 1
#fi

# 获取本地文件信息
LOCAL_FILE_TIME=$(stat -c "%y" ${JAR_PATH})
LOCAL_FILE_SIZE=$(stat -c%s ${JAR_PATH})
#echo "本地部署包信息:"
#echo "  文件名: ${JAR_FILE}"
#echo "  文件大小: ${LOCAL_FILE_SIZE} 字节"
#echo "  修改时间: ${LOCAL_FILE_TIME}"
#
## 上传文件到远程服务器
#echo "正在上传文件到 ${REMOTE_HOST}:${REMOTE_DIR}"
#if scp ${JAR_PATH} ${REMOTE_HOST}:${REMOTE_DIR}/; then
#    echo "文件上传成功！"
#else
#    echo "错误: 文件上传失败！"
#    exit 1
#fi

# 在远程服务器上执行部署操作
echo "正在远程服务器上执行部署..."
ssh ${REMOTE_HOST} "
    # 停止正在运行的服务
    echo '停止正在运行的服务...'
    cd ${REMOTE_DIR}
    if [ -f \"stop.sh\" ]; then
        ./stop.sh
    else
        # 备用停止方法
        if pgrep -f '${JAR_FILE}' > /dev/null; then
            pkill -f '${JAR_FILE}' || true
        fi
    fi

    sleep 3

    # 备份当前的JAR文件（如果存在）
    TIMESTAMP=\$(date +%Y%m%d_%H%M%S)

    if [ -f \"${JAR_FILE}\" ]; then
        echo '备份当前版本...'
        cp \"${JAR_FILE}\" \"${JAR_FILE}.bak_\${TIMESTAMP}\"
        # 同时保留一个最新备份的副本
        cp \"${JAR_FILE}\" \"${JAR_FILE}.bak\"
    fi

    # 启动服务
    echo '启动服务...'
    if [ -f \"1_start.sh\" ]; then
        # 给脚本添加执行权限
        chmod +x 1_start.sh
        # 在后台执行启动脚本并将输出重定向到日志文件
        nohup ./1_start.sh > startup.log 2>&1 &
        START_PID=\$!

        # 监听日志文件，等待启动成功的消息
        echo '监听启动日志，等待服务启动完成...'
        TIMEOUT=300  # 5分钟超时
        ELAPSED=0
        SLEEP_INTERVAL=5

        while [ \$ELAPSED -lt \$TIMEOUT ]; do
            if [ -f \"startup.log\" ] && grep -q \"RuoYiAI启动成功\" startup.log; then
                echo '检测到启动成功消息，服务启动完成！'
                break
            fi

            echo \"等待服务启动... (\$ELAPSED/\$TIMEOUT 秒)\"
            sleep \$SLEEP_INTERVAL
            ELAPSED=\$((ELAPSED + SLEEP_INTERVAL))

            # 检查进程是否仍在运行
            if ! kill -0 \$START_PID 2>/dev/null; then
                echo '启动进程已退出，检查日志...'
                tail -n 20 startup.log
                exit 1
            fi
        done

        # 超时检查
        if [ \$ELAPSED -ge \$TIMEOUT ]; then
            echo '服务启动超时，请检查日志文件 startup.log'
            exit 1
        fi
    else
        nohup java -jar ${JAR_FILE} > logs/app.log 2>&1 &
        echo \$! > app.pid
    fi

    echo '部署操作完成！'
"

# 检查远程操作是否成功
if [ $? -eq 0 ]; then
    echo "远程部署成功！"

    # 获取远程操作完成时间
    REMOTE_FINISH_TIME=$(date '+%Y-%m-%d %H:%M:%S')
    echo "远程操作完成于: ${REMOTE_FINISH_TIME}"
else
    echo "错误: 远程部署操作失败！"
    exit 1
fi

# 返回到脚本原始目录
cd ${SCRIPT_DIR}

echo "========================================"
echo "部署完成!"
echo "========================================"
